package br.unipar.blog.web.controller.usuario;

import javax.faces.context.FacesContext;

import org.apache.commons.codec.digest.DigestUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;

import br.unipar.blog.persistence.entity.Usuario;
import br.unipar.blog.persistence.manager.usuario.UsuarioManager;
import br.unipar.blog.web.jsf.Navigator;

public class LoginController {

    private final Logger logger = LoggerFactory.getLogger(getClass());
    public static final String USUARIO_SESSION = "usuarioSession";
    @Autowired
    private UsuarioManager usuarioManager;
    private Usuario usuario = createUsuario();

    public Usuario getUsuario() {
        return usuario;
    }

    public void setUsuario(Usuario usuario) {
        this.usuario = usuario;
    }

    private Usuario createUsuario() {
        return new Usuario();
    }

    public Usuario getUsuarioSession() {
        FacesContext facesContext = FacesContext.getCurrentInstance();
        return (Usuario) facesContext.getExternalContext().getSessionMap().get(USUARIO_SESSION);
    }

    public String acessar() {
        Usuario u = usuarioManager.buscar(usuario.getEmail());
        String senha = DigestUtils.md5Hex(usuario.getSenha());
        if (logger.isDebugEnabled()) {
            if (u != null) {
                logger.debug("Buscando usuario");
                logger.debug("email : " + u.getEmail());
                logger.debug("senha : " + u.getSenha());
                logger.debug("Senha : " + senha);
            }
        }
        if (u != null && u.getSenha().equals(senha)) {
            FacesContext facesContext = FacesContext.getCurrentInstance();
            facesContext.getExternalContext().getSessionMap().put(USUARIO_SESSION, u);
            usuario = createUsuario();
        }
        return Navigator.index.name();
    }

    public String sair() {
        FacesContext facesContext = FacesContext.getCurrentInstance();
        facesContext.getExternalContext().getSessionMap().remove(USUARIO_SESSION);
        return Navigator.index.name();
    }
}
